/**
 * router.js路由模块
 * 划分模块的目的就是为了增强代码的可维护性
 * @get req.query
 * @post req.body
 */

// var fs = require('fs')  // 需要引用json文件
var Student = require('./student')

// 这样也不方便
// module.exports = function(app) {
//     console.log(app)
//     app.get('/students',function(req,res) {
//         // res.send('hello world')
//         // readFile的第二个参数是可选的，传入utf8就是告诉它把读取到的文件直接按照utf8编码
//         // 除了这样来转换之外，也可以通过data.toString()的方式
//         // 从文件中读取到的数据一定是字符串
//         // 所以这里一定要手动转成对象
//         fs.readFile('./db.json','utf8',function(err,data){
//             if(err) {
//                 console.log('读取文件失败了')
//                 return res.status(500).send('Server error')
//             } else {
//                 console.log(data) // 字符串类型
//                 var students = JSON.parse(data).students
//                 res.render('index.html', {
//                     students: students // 字符串转对象才能使用
//                 })
//                 // console.log(data.toString()) // 除了utf8还可以用toString
//             }
//         })
//     })
// }

// express提供了一种更好的方式 专门用来包装路由的
var express = require('express')
// 1.创建一个路由容器
var router = express.Router()
// 2.把路由都挂载到router路由容器中
router.get('/students', function (req, res) {
    // 未封装前的写法
    // res.send('hello world')
    // readFile的第二个参数是可选的，传入utf8就是告诉它把读取到的文件直接按照utf8编码
    // 除了这样来转换之外，也可以通过data.toString()的方式
    // 从文件中读取到的数据一定是字符串
    // 所以这里一定要手动转成对象
    // fs.readFile('./db.json','utf8',function(err,data){
    //     if(err) {
    //         console.log('读取文件失败了')
    //         return res.status(500).send('Server error')
    //     } else {
    //         // console.log(data) // 字符串类型
    //         var students = JSON.parse(data).students
    //         res.render('index.html', {
    //             students: students // 字符串转对象才能使用
    //         })
    //         // console.log(data.toString()) // 除了utf8还可以用toString
    //     }
    // })

    // 这个东东就是students.js里面封装的callback方法
    // function( err,students) {
    //     if(err) {
    //         console.log('读取文件失败了')
    //         return res.status(500).send('Server error')
    //     } else {
    //         res.render('index.html', {
    //             students: students // 字符串转对象才能使用
    //         })
    //     }
    // }

    // 封装后的写法 
    Student.find(function (err, students) {
        if (err) {
            console.log('读取文件失败了')
            return res.status(500).send('Server error')
        } else {
            res.render('index.html', {
                students: students // 字符串转对象才能使用
            })
        }
    })
})

// 跳转到新增页面
router.get('/students/new', function (req, res) {
    res.render('new.html', {})
})

// 确认新增
router.post('/students/new', function (req, res) {
    console.log(req.body)
    // 1.获取表单数据
    // 2.处理
    //  将数据保存在到db.json文件中用以持久化
    // 3.发送响应
    //  先读取对象，转成对象
    //  然后往对象中push数据
    //  然后把对象转为字符串
    //  然后把字符串再次写入文件

    // Student.save(req.body, function (err) {
    //     if (err) {
    //         console.log('读取文件失败了')
    //         return res.status(500).send('Server error')
    //     } else {
    //         res.redirect('/students')
    //     }
    // })

    // mongDB改造
    new Student(req.body).save(function (err) {
        if (err) {
            console.log('读取文件失败了')
            return res.status(500).send('Server error')
        } else {
            res.redirect('/students')
        }
    })
})

// 渲染编辑学生页面
router.get('/students/edit', function (req, res) {
    // 1.在客户端的列表页中处理链接问题（需要有id参数）
    // 2.获取要编辑的学生id
    // 3.渲染编辑页面
    //     根据模板引擎渲染页面
    // console.log(req)
    // Student.findById(parseInt(req.query.id), function (err, student) {
    //     if (err) {
    //         console.log('修改文件失败了')
    //         return res.status(500).send('Server error')
    //     }
    //     console.log(student)
    //     res.render('edit.html', {
    //         student: student
    //     })
    // })
    console.log(req.query.id)
    // mongDB改造
    Student.findById(req.query.id.replace(/"/g, ''), function (err, student) {
        if (err) {
            console.log('修改文件失败了')
            return res.status(500).send('Server error')
        }
        console.log(student)
        res.render('edit.html', {
            student: student
        })
    })
})

// 确认修改学生信息
router.post('/students/edit', function (req, res) {
    // 1.获取表单数据 req.body
    // 2.更新 Students.update()
    // 3.发送响应
    console.log(req.body)
    // Student.updateById(req.body, function (err) {
    //     if (err) {
    //         return res.status(500).send('Server error')
    //     } else {
    //         res.redirect('/students')
    //     }
    // })

    // mongDB改造
    var id = req.body.id.replace(/"/g, '')
    Student.findByIdAndUpdate(id, req.body,  function (err) {
        if (err) {
            return res.status(500).send('Server error')
        } else {
            res.redirect('/students')
        }
    })
})

// 确认删除
router.get('/students/delete', function (req, res) {
    // 1.获取要删除的id
    // 2.根据id执行删除操作
    // 3.根据操作结果发送响应数据
    console.log(req.query.id)
    // Student.deleteById(req.query.id, function (err) {
    //     if (err) {
    //         return res.status(500).send('Server error')
    //     } else {
    //         res.redirect('/students')
    //     }
    // })

    // mongDB改造
    var id = req.query.id.replace(/"/g,'')
    console.log(id)
    Student.findByIdAndRemove(id, function (err) {
        if (err) {
            return res.status(500).send('Server error')
        } else {
            res.redirect('/students')
        }
    })
})
// 3.把router导出
module.exports = router


